package com.leinao.category.service;

import com.leinao.category.dto.CategoryCount;
import com.leinao.category.dto.CategoryDto;
import com.leinao.category.dto.CategoryRelationDto;
import com.leinao.category.model.BatchCategoryRelation;
import com.leinao.category.model.CategoryRelation;
import com.leinao.commons.Response;
import com.leinao.login.dto.LoginResultDto;

import java.util.List;

/**
 *
 * @Description 算法、数据集分类服务
 * @author lizi
 * @date 2019/03/06 下午5:15
 * @Version 1.0
 */
public interface CategoryService {

    /**
      * 功能描述：获取分类列表信息
      * @param type 类型: 1-算法，2-数据集
      * @return com.leinao.commons.Response<java.util.List<com.leinao.category.dto.CategoryDto>> 结果数据
      * @Author: guoliangbo
      * @Date: 2019/4/19 14:19
      */
    Response<List<CategoryDto>> getCategoryListByType(Integer type);

    /**
      * 功能描述：获取分类树信息
      * @param type 类型: 1-算法，2-数据集
      * @return com.leinao.commons.Response<java.util.List<com.leinao.category.dto.CategoryDto>> 结果类型
      * @Author: guoliangbo
      * @Date: 2019/4/19 14:19
      */
    Response<List<CategoryDto>> getCategoryTreeByType(Integer type);

    /**
      * 功能描述：获取主体分类关联关系
      * @param objectId 主体ID
      * @param type 类型: 1-算法，2-数据集
      * @return com.leinao.commons.Response<java.util.List<com.leinao.category.dto.CategoryRelationDto>> 关系结果
      * @author: guoliangbo
      * @Date: 2019/4/19 14:20
      */
    Response<List<CategoryRelationDto>> getCategoryRelationList(Long objectId, Integer type);

    /**
      * 功能描述：删除分类
      * @param categoryRelationId 分类关联ID
      * @param userInfo 用户信息
      * @return com.leinao.commons.Response<java.lang.Void> 返回空结果
      * @Author: guoliangbo
      * @Date: 2019/4/19 14:21
      */
    Response<Void> deleteCategoryRelation(Long categoryRelationId, LoginResultDto userInfo);

    /**
      * 功能描述：添加分类
      * @param categoryRelation 分类信息
      * @param userInfo
      * @return com.leinao.commons.Response<java.lang.Long>
      * @Author: guoliangbo
      * @Date: 2019/4/19 14:23
      */
    Response<Long> addCategoryRelation(CategoryRelation categoryRelation, LoginResultDto userInfo);

    /**
     * 功能描述：批量保存分类信息
     * @param batchCategoryRelation 分类批量信息
     * @param userInfo 用户信息
     * @return com.leinao.commons.Response<java.lang.Long> 影响行数
     * @Author: guoliangbo
     * @Date: 2019/4/19 14:22
     */
    Response<Void> saveCategoryRelationList(BatchCategoryRelation batchCategoryRelation, LoginResultDto userInfo);

    /**
      * 功能描述： 获取公开项目关联最多的5个标签
      * @param type 1:公开项目  2:数据集
      * @return com.leinao.commons.Response<java.util.List<com.leinao.category.dto.CategoryDto>> 公开项目关联最多的5个标签
      * @Author: guoliangbo
      * @Date: 2019/4/19 14:27
      */
    Response<List<CategoryDto>> getTopFiveRelationCategory(Integer type);

    /**
      * 功能描述：获取公开项目和公开数据集关联的标签个数
      * @return com.leinao.commons.Response<com.leinao.category.dto.CategoryCount>
      * @Author: guoliangbo
      * @Date: 2019/4/19 14:28
      */
    Response<CategoryCount> getCategoryCount();
}
